function logged(value, context) {
  console.log(value, 'value')
  console.log(context, 'context')
  if (context.kind === 'class') { // 装饰器装饰的是一个类
    return class extends value { // 重写被装饰的类
      num: number
      constructor(...args) {
        super(...args)
        console.log('被装饰的类额外逻辑')
      }
    }
  }
}

@logged
class C {
  constructor(public num: number) {
  }
}

// 实例化类的时候会执行类的装饰器
const c = new C(1)
console.log(c.num)

export {} // 让这个ts文件成为一个模块